package com.c2b.algorithm.newcoder.double_pointer;

/**
 * <a href="https://www.nowcoder.com/practice/3d8d6a8e516e4633a2244d2934e5aa47?tpId=295&tags=&title=&difficulty=0&judgeStatus=0&rp=0&sourceUrl=%2Fexam%2Foj">盛水最多的容器</a>
 * <p>给定一个数组height，长度为n，每个数代表坐标轴中的一个点的高度，height[i]是在第i点的高度，请问，从中选2个高度与x轴组成的容器最多能容纳多少水</p>
 * 1.你不能倾斜容器<br>
 * 2.当n小于2时，视为不能形成容器，请返回0<br>
 * 3.数据保证能容纳最多的水不会超过整形范围，即不会超过2^31-1<br>
 * 数据范围:0<=height.length<=10^5，0<=height[i]<=10^4<br>
 *
 * @author c2b
 * @since 2023/3/15 15:33
 */
public class BM0093MaxArea_M {

    public int maxArea(int[] height) {
        if (height == null || height.length < 2) {
            return 0;
        }
        int leftIndex = 0;
        int rightIndex = height.length - 1;
        int res = 0;
        while (leftIndex < rightIndex) {
            //计算区域水面积：底*高
            final int area = Math.min(height[leftIndex], height[rightIndex]) * (rightIndex - leftIndex);
            // 先更新最大值
            res = Math.max(area, res);
            if (height[leftIndex] < height[rightIndex]) {
                // 如果左边值较小，左侧的右移
                leftIndex++;
            } else {
                // 如果右侧的较小，右侧的左移
                rightIndex--;
            }
        }
        return res;
    }

    public static void main(String[] args) {
        BM0093MaxArea_M bm0093MaxArea_m = new BM0093MaxArea_M();
        System.out.println(bm0093MaxArea_m.maxArea(new int[]{1, 7, 3, 2, 4, 5, 8, 2, 7}));
    }
}
